package net.chanibal.hala.client;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;


import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ServerAsync {

	void getUserName(AsyncCallback callback);

	void isValid(AsyncCallback callback);

	void isAdmin(AsyncCallback callback);

	/**
	 * Logowanie klienta
	 * 
	 * @param login
	 * @param pass
	 * @throws Exception -
	 *             błędy logowania
	 */
	public void doLogin(String login, String pass, AsyncCallback callback);

	/**
	 * Rejestracja klienta
	 * 
	 * @param login
	 * @param pass
	 * @param age
	 * @param sex
	 *            F lub M
	 * @param address
	 * @param name
	 *            imię
	 * @param familyName
	 *            nazwisko
	 * @throws Exception
	 */
	public void doRegister(String login, String pass, Integer age, char sex, String address, String name, String familyName, AsyncCallback callback);

	/**
	 * Wylogowanie klienta lub administratora
	 * @throws SerializableException 
	 */
	public void doLogout(AsyncCallback callback);

	/**
	 * Stan konta
	 * 
	 * @throws Exception
	 */
	void getBilling(AsyncCallback callback);

	/**
	 * Wszystkie imprezy w bazie
	 * 
	 * @param callback the callback to return String[][], pola drugiego (po kolei: nazwa, następny termin,
	 *         pozostało terminów, wolnych miejsc, id imprezy)
	 * @throws Exception
	 */
	public void getImprezy(AsyncCallback callback);

	/**
	 * Rezerwacja imprezy przez klienta, automatycznie dopisuje wszystkie
	 * pozostałe terminy
	 * 
	 * @param imprezaId
	 * @throws Exception 
	 */
	public void doReserve(Integer imprezaId, AsyncCallback callback);

	/**
	 * Logowanie - wersja dla administratora
	 * 
	 * @param pass
	 * @throws Exception
	 */
	public void doAdminLogin(String pass, AsyncCallback callback);

	/**
	 * Zwraca listę klientów
	 * 
	 * @param callback the callback to return klucz - id, wartość - imię, nazwisko
	 * @throws TorqueException
	 */

	public void getKlienci(AsyncCallback callback);

	/**
	 * Zwraca dane klienta
	 * 
	 * @param klientId
	 * @param callback the callback to return te dane
	 * @throws Exception
	 */
	public void getKlient(String klientLogin, AsyncCallback callback);

	/**
	 * Wpłata dokonana przez klienta
	 * 
	 * @param klientId
	 * @param ile
	 * @throws Exception
	 */
	public void doWplata(String klientLogin, Double ile, AsyncCallback callback);

	/**
	 * Dodaje imprezę
	 * 
	 * @param tytul
	 * @param kosztZaTermin
	 * @param miejsc
	 * @param terminy
	 *            tablica dwudatowych krotek (rozpoczęcie, koniec)
	 * @throws Exception 
	 */
	public void doAddImpreza(String tytul, Float kosztZaTermin, Integer miejsc, Date terminy[][], AsyncCallback callback);

	public void getImpreza(Integer id, AsyncCallback callback);
	public void getImprezaTerminy(Integer id, AsyncCallback callback);
	
	
}
